

# Python的注释以 # 开头，后面的内容都是注释
#   注释可以单独作为一行
#   也可以接在代码的后面
#   也可以连续有多行的注释

# Python 使用三个连续的单引号'''或者三个连续的双引号"""注释多行内容


'''
使用 3 个单引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
'''

"""
使用 3 个双引号分别作为注释的开头和结尾
可以一次性注释多行内容
这里面的内容全部是注释内容
"""


"""
输入和输出
    print()函数也可以接受多个字符串，用逗号“,”隔开
    input()，可以让用户输入字符串
"""


"""
1. 数据类型
    整数， 
       可以处理任意大小的整数，当然包括负整数
       比如 3 
    小数（也叫浮点数） ，比如 6.5
    字符串 
        字符串是以单引号'或双引号"括起来的任意文本  
        如果'本身也是一个字符，那就可以用""括起来，比如"I'm OK"
        比如 '你好'
    布尔值
        和布尔代数的表示完全一致，一个布尔值只有True、False两种值
    空值
        是Python里一个特殊的值，用None表示
        None不能理解为0，因为0是有意义的，而None是一个特殊的空值。

"""
print("1. Python 中的对象类型---------")

# 1.1 通过print语句输出各类字面量
print(666)
print(13.14)
print("黑马程序员")

"""
2. Python 中的数据类型
"""
print("2. Python 中的数据类型--------------")

# 2.1 方式1： 使用print直接输出类型信息
print(type("黑马程序员"))
print(type(666))
print(type(11.345))


# 2.2 方式2： 使用变量存储type()语句的结果
string_type = type("黑马程序员")
int_type = type(666)
float_type = type(11.345)
print(string_type)
print(int_type)
print(float_type)


# 2.3 方式3： 使用type()语句，查看变量中存储的数据类型信息
name = "黑马程序员"
name_type = type(name)
print(name_type)

"""
3. 数据类型转换
"""
print("3. Python 中的数据类型转换----------")

# 3.1 将数字类型转换成字符串
num_str = str(11)
print(type(num_str), num_str)

float_str = str(11.345)
print(type(float_str), float_str)

# 3.2 将字符串转换成数字
num = int("11")
print(type(num), num)

num2 = float("11.345")
print(type(num2), num2)

# 3.3 错误示例，想要将字符串转换成数字，必须要求字符串内的内容都是数字
# num3 = int("黑马程序员")
# print(type(num3), num3)

# 3.4 整数转浮点数
float_num = float(11)
print(type(float_num), float_num)

# 3.5 浮点数转整数
int_num = int(11.345)
print(type(int_num), int_num)


"""
4. Python中的字符串拼接 和 格式化
    format()
        它会用传入的参数依次替换字符串内的占位符{0}、{1}……，不过这种方式写起来比%要麻烦得多
    f-string    
        使用以f开头的字符串，称之为f-string，它和普通字符串不同之处在于，字符串如果包含{xxx}，就会以对应的变量替换
"""
print("4. Python中的字符串拼接 和 格式化--------")

# 4.1 字符串字面量之间的拼接
print("学IT来黑马" + "月薪过万")

# 4.2 字符串字面量和字符串变量的拼接
name = "黑马程序员"
address = "建材城东路9号院"
tel = 4006189090
print("我是：" + name + "，我的地址是：" + address + "，我的电话是：" + str(tel))


# 4.3 通过占位的形式，完成拼接
name = "黑马程序员"
message = "学IT来：%s" % name
print(message)

# 4.4 通过占位的形式，完成数字和字符串的拼接
class_num = 57
avg_salary = 16781
message = "Python大数据学科，北京%s期，毕业平均工资：%s" % (class_num, avg_salary)
print(message)

name = "传智播客"
setup_year = 2006
stock_price = 19.99
message = "%s，成立于：%d，我今天的股价是：%f" % (name, setup_year, stock_price)
print(message)


num1 = 11
num2 = 11.345
print("数字11宽度限制5，结果是：%5d" % num1)
print("数字11宽度限制1，结果是：%1d" % num1)
print("数字11.345宽度限制7，小数精度2，结果是：%7.2f" % num2)
print("数字11.345不限制，小数精度2，结果是：%.2f" % num2)


testStr = 'Hello, {0}, 成绩提升了 {1:.1f}%'.format('小明', 17.125)
print(testStr)

r = 2.5
s = 3.14 * r ** 2
print(f'The area of a circle with radius {r} is {s:.2f}')

"""
6. Python 中的判断语句

    if <条件判断1>:
    <执行1>
    elif <条件判断2>:
        <执行2>
    elif <条件判断3>:
        <执行3>
    else:
        <执行4>
        
        
"""
print("6. Python 中的判断语句------------")

# 6.1 定义变量存储布尔类型的数据
bool_1 = True
bool_2 = False
print(f"bool_1变量的内容是：{bool_1}, 类型是：{type(bool_1)}")
print(f"bool_2变量的内容是：{bool_2}, 类型是：{type(bool_2)}")

# 6.2 比较运算符的使用
# == , !=, >, <, >=, <=
# 演示进行内容的相等比较
num1 = 10
num2 = 10
print(f"10 == 10的结果是：{num1 == num2}")

num1 = 10
num2 = 15
print(f"10 != 15的结果是：{num1 != num2}")

name1 = "itcast"
name2 = "itheima"
print(f"itcast == itheima 结果是：{name1 == name2}")

# 演示大于小于，大于等于小于等于的比较运算
num1 = 10
num2 = 5
print(f"10 > 5结果是：{num1 > num2}")
print(f"10 < 5的结果是：{num1 < num2}")

num1 = 10
num2 = 11
print(f"10 >= 11的结果是：{num1 >= num2}")
print(f"10 <= 11的结果是：{num1 <= num2}")


# 6.3 if else 使用
age = int(input("请输入你的年龄："))
if age >= 18:
    print("您已成年，需要买票10元。")
else:
    print("您未成年，可以免费游玩。")

# 通过if判断，可以使用多条件判断的语法
# 第一个条件就是if
if int(input("请输入你的身高（cm）：")) < 120:
    print("身高小于120cm，可以免费。")
elif int(input("请输入你的VIP等级（1-5）：")) > 3:
    print("vip级别大于3，可以免费。")
elif int(input("请告诉我今天几号：")) == 1:
    print("今天是1号免费日，可以免费")
else:
    print("不好意思，条件都不满足，需要买票10元。")

# 6.4 判断语句的嵌套
age = 11
year = 1
level = 1
if age >= 18:
    print("你是成年人")
    if age < 30:
        print("你的年龄达标了")
        if year > 2:
            print("恭喜你，年龄和入职时间都达标，可以领取礼物")
        elif level > 3:
            print("恭喜你，年龄和级别达标，可以领取礼物")
        else:
            print("不好意思，尽管年龄达标，但是入职时间和级别都不达标。")
    else:
        print("不好意思，年龄太大了")
else:
    print("不好意思，小朋友不可以领取。")


# 使用match语句
score = 'B'
match score:
    case 'A':
        print('score is A.')
    case 'B':
        print('score is B.')
    case 'C':
        print('score is C.')
    case _: # _表示匹配到其他任何情况
        print('score is ???.')

# match语句除了可以匹配简单的单个值外，还可以匹配多个值、匹配一定范围，并且把匹配后的值绑定到变量：
age = 15
match age:
    case x if x < 10:
        print(f'< 10 years old: {x}')
    case 10:
        print('10 years old.')
    case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:
        print('11~18 years old.')
    case 19:
        print('19 years old.')
    case _:
        print('not sure.')

# match语句还可以匹配列表，功能非常强大
args = ['gcc', 'hello.c', 'world.c']
# args = ['clean']
# args = ['gcc']
match args:
    # 如果仅出现gcc，报错:
    case ['gcc']:
        print('gcc: missing source file(s).')
    # 出现gcc，且至少指定了一个文件:
    case ['gcc', file1, *files]:
        print('gcc compile: ' + file1 + ', ' + ', '.join(files))
    # 仅出现clean:
    case ['clean']:
        print('clean')
    case _:
        print('invalid command.')


"""
7. Python 中的循环语句
    for x in ...循环就是把每个元素代入变量x，然后执行缩进块的语句。
    range()函数，
        可以生成一个整数序列，再通过list()函数可以转换为list。比如range(5)生成的序列是从0开始小于5的整数
"""
print("7. Python 中的循环语句------------")


# 7.1 while 循环
i = 0
while i < 10:
    print("小美，我喜欢你")
    i += 1

# 7.2 for 循环
name = "itheima"
for x in name:
    # 将name的内容，挨个取出赋予x临时变量
    # 就可以在循环体内对x进行处理
    print(x)

# 7.3 range()语句的基本使用
# range语法1 range(num)
for x in range(10):
    print(x)

# range 语法2 range(num1, num2)
for x in range(5, 10):
    # 从5开始，到10结束（不包含10本身）的一个数字序列，数字之间间隔是1
    print(x)

# range 语法3 range(num1, num2, step)
for x in range(5, 10, 2):
    # 从5开始，到10结束（不包含10本身）的一个数字序列，数字之间的间隔是2
    print(x)

for x in range(10):
    print("送玫瑰花")
